
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>
   <TITLE>vprjpi_c</TITLE>
</HEAD>

<BODY style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<A name="TOP"></A>

<table style="text-align: left; margin-left: auto; margin-right: auto; width: 800px;"
 border="0" cellpadding="5" cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(153, 153, 153); vertical-align: middle; text-align: center;">
      <div align="right"> 
      <small><small><a href="index.html">Index Page</a></small></small>
      </div>
      <b>vprjpi_c</b> </td>
    </tr>

    <tr>
      <td style="vertical-align: top;">

<small><div align="center">
<A HREF="index.html#A">A</A>&nbsp;
<A HREF="index.html#B">B</A>&nbsp;
<A HREF="index.html#C">C</A>&nbsp;
<A HREF="index.html#D">D</A>&nbsp;
<A HREF="index.html#E">E</A>&nbsp;
<A HREF="index.html#F">F</A>&nbsp;
<A HREF="index.html#G">G</A>&nbsp;
<A HREF="index.html#H">H</A>&nbsp;
<A HREF="index.html#I">I</A>&nbsp;
<A HREF="index.html#J">J</A>&nbsp;
<A HREF="index.html#K">K</A>&nbsp;
<A HREF="index.html#L">L</A>&nbsp;
<A HREF="index.html#M">M</A>&nbsp;
<A HREF="index.html#N">N</A>&nbsp;
<A HREF="index.html#O">O</A>&nbsp;
<A HREF="index.html#P">P</A>&nbsp;
<A HREF="index.html#Q">Q</A>&nbsp;
<A HREF="index.html#R">R</A>&nbsp;
<A HREF="index.html#S">S</A>&nbsp;
<A HREF="index.html#T">T</A>&nbsp;
<A HREF="index.html#U">U</A>&nbsp;
<A HREF="index.html#V">V</A>&nbsp;
<A HREF="index.html#W">W</A>&nbsp;
<A HREF="index.html#X">X</A>&nbsp;
</div></small>
       <br>
       <table style="text-align: left; width: 60%; margin-left: auto; margin-right: auto;"
       border="0" cellspacing="2" cellpadding="2">
        <tbody>
          <tr>
            <td style="width: 50%; text-align: center;">
            <small>
              <a href="#Procedure">Procedure<br></a>
              <a href="#Abstract">Abstract<br></a>
              <a href="#Required_Reading">Required_Reading<br></a>
              <a href="#Keywords">Keywords<br></a>
              <a href="#Brief_I/O">Brief_I/O<br></a>
              <a href="#Detailed_Input">Detailed_Input<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Detailed_Output">Detailed_Output<br></a>
              <a href="#Parameters">Parameters<br></a>
              <a href="#Exceptions">Exceptions<br></a>
              <a href="#Files">Files<br></a>
              <a href="#Particulars">Particulars<br></a>
              <a href="#Examples">Examples<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Restrictions">Restrictions<br></a>
              <a href="#Literature_References">Literature_References<br></a>
              <a href="#Author_and_Institution">Author_and_Institution<br></a>
              <a href="#Version">Version<br></a>
              <a href="#Index_Entries">Index_Entries<br></a>
             </small>
            </td>
          </tr>
        </tbody>
</table>

<h4><a name="Procedure">Procedure</a></h4>
<PRE>
   void vprjpi_c ( ConstSpiceDouble    vin    [3],
                   ConstSpicePlane   * projpl,
                   ConstSpicePlane   * invpl,
                   SpiceDouble         vout   [3],
                   SpiceBoolean      * found       ) 

</PRE>
<h4><a name="Abstract">Abstract</a></h4>
<PRE>
 
   Find the vector in a specified plane that maps to a specified 
   vector in another plane under orthogonal projection. 
 </PRE>
<h4><a name="Required_Reading">Required_Reading</a></h4>
<PRE>
 
   <a href="../req/planes.html">PLANES</a> 
 </PRE>
<h4><a name="Keywords">Keywords</a></h4>
<PRE>
 
   GEOMETRY 
   MATH 
   PLANE 
   VECTOR 
 

</PRE>
<h4><a name="Brief_I/O">Brief_I/O</a></h4>
<PRE>
 
   Variable  I/O  Description 
   --------  ---  -------------------------------------------------- 
   vin        I   The projected vector. 
   projpl     I   Plane containing vin. 
   invpl      I   Plane containing inverse image of vin. 
   vout       O   Inverse projection of vin. 
   found      O   Flag indicating whether vout could be calculated. 
 </PRE>
<h4><a name="Detailed_Input">Detailed_Input</a></h4>
<PRE>
 
   vin, 
   projpl, 
   invpl          are, respectively, a 3-vector, a CSPICE plane 
                  containing the vector, and a CSPICE plane 
                  containing the inverse image of the vector under 
                  orthogonal projection onto projpl. 
 </PRE>
<h4><a name="Detailed_Output">Detailed_Output</a></h4>
<PRE>
 
   vout           is the inverse orthogonal projection of vin.  This 
                  is the vector lying in the plane invpl whose 
                  orthogonal projection onto the plane projpl is 
                  vin.  vout is valid only when found (defined below) 
                  is SPICETRUE. Otherwise, vout is undefined. 
 
   found          indicates whether the inverse orthogonal projection 
                  of vin could be computed.  found is SPICETRUE if so, 
                  SPICEFALSE otherwise. 
 </PRE>
<h4><a name="Parameters">Parameters</a></h4>
<PRE>
 
   None. 
 </PRE>
<h4><a name="Exceptions">Exceptions</a></h4>
<PRE>
 
   1)  If the geometric planes defined by projpl and invpl are 
       orthogonal, or nearly so, the inverse orthogonal projection 
       of vin may be undefined or have magnitude too large to 
       represent with double precision numbers.  In either such 
       case, found will be set to SPICEFALSE. 
 
   2)  Even when found is SPICETRUE, vout may be a vector of extremely 
       large magnitude, perhaps so large that it is impractical to 
       compute with it.  It's up to you to make sure that this 
       situation does not occur in your application of this routine. 
 </PRE>
<h4><a name="Files">Files</a></h4>
<PRE>
 
   None. 
 </PRE>
<h4><a name="Particulars">Particulars</a></h4>
<PRE>
 
   Projecting a vector orthogonally onto a plane can be thought of 
   as finding the closest vector in the plane to the original vector. 
   This `closest vector' always exists; it may be coincident with the 
   original vector.  Inverting an orthogonal projection means finding 
   the vector in a specified plane whose orthogonal projection onto 
   a second specified plane is a specified vector.  The vector whose 
   projection is the specified vector is the inverse projection of 
   the specified vector, also called the `inverse image under 
   orthogonal projection' of the specified vector.  This routine 
   finds the inverse orthogonal projection of a vector onto a plane. 
 
   Related routines are <a href="vprjp_c.html">vprjp_c</a>, which projects a vector onto a plane 
   orthogonally, and <a href="vproj_c.html">vproj_c</a>, which projects a vector onto another 
   vector orthogonally. 
 </PRE>
<h4><a name="Examples">Examples</a></h4>
<PRE>
 
   1)   Suppose 
 
           vin    =  ( 0.0, 1.0, 0.0 ), 
 
        and that projpl has normal vector 
 
           projn  =  ( 0.0, 0.0, 1.0 ). 
 
        Also, let's suppose that invpl has normal vector and constant 
 
           invn   =  ( 0.0, 2.0, 2.0 ) 
           invc   =    4.0. 
 
        Then vin lies on the y-axis in the x-y plane, and we want to 
        find the vector vout lying in invpl such that the orthogonal 
        projection of vout the x-y plane is vin.  Let the notation 
        &lt; a, b &gt; indicate the inner product of vectors a and b. 
        Since every point x in invpl satisfies the equation 
 
           &lt;  x,  (0.0, 2.0, 2.0)  &gt;  =  4.0, 
 
        we can verify by inspection that the vector 
 
           ( 0.0, 1.0, 1.0 ) 
 
        is in invpl and differs from vin by a multiple of projn.  So 
 
           ( 0.0, 1.0, 1.0 ) 
 
        must be vout. 
 
        To find this result using CSPICE, we can create the 
        CSPICE planes projpl and invpl using the code fragment 
 
           <a href="nvp2pl_c.html">nvp2pl_c</a>  ( projn,  vin,  &amp;projpl ); 
           <a href="nvc2pl_c.html">nvc2pl_c</a>  ( invn,   invc, &amp;invpl  ); 
 
        and then perform the inverse projection using the call 
 
           <b>vprjpi_c</b> ( vin, &amp;projpl, &amp;invpl, vout );
 
        <b>vprjpi_c</b> will return the value 
 
           vout = ( 0.0, 1.0, 1.0 );
 </PRE>
<h4><a name="Restrictions">Restrictions</a></h4>
<PRE>
 
   None. 
 </PRE>
<h4><a name="Literature_References">Literature_References</a></h4>
<PRE>
 
   [1] `Calculus and Analytic Geometry', Thomas and Finney. 
 </PRE>
<h4><a name="Author_and_Institution">Author_and_Institution</a></h4>
<PRE>
 
   N.J. Bachman   (JPL) 
 </PRE>
<h4><a name="Version">Version</a></h4>
<PRE>
 
   -CSPICE Version 1.1.0, 05-APR-2004 (NJB)
 
      Computation of LIMIT was re-structured to avoid
      run-time underflow warnings on some platforms.

   -CSPICE Version 1.0.0, 05-MAR-1999 (NJB)
</PRE>
<h4><a name="Index_Entries">Index_Entries</a></h4>
<PRE>
 
   vector projection onto plane inverted 
 </PRE>
<h4>Link to routine vprjpi_c source file <a href='../../../src/cspice/vprjpi_c.c'>vprjpi_c.c</a> </h4>

      </td>
    </tr>
  </tbody>
</table>

   <pre>Wed Jun  9 13:05:32 2010</pre>

</body>
</html>

